package com.aiyi.education.user.service;

import com.aiyi.education.entity.KsUser;
import com.aiyi.education.entity.KsUserWithBLOBs;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.education.util.vo.Result;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * <p>
 * 用户表 服务类
 * </p>
 *
 * @author renyong
 * @since 2020-04-22
 */
public interface IKsUserService extends IService<KsUserWithBLOBs> {


    Map<String, Object> getLoginUserAndMenuInfo(KsUserWithBLOBs user);

    public void saveSysUser(KsUser ksUser);

    public IPage<KsUser> getUsersPage(Page<KsUser> page, JSONObject jsonObject);
    /**
     * 重置密码
     *
     * @param username
     * @param oldpassword
     * @param newpassword
     * @param confirmpassword
     * @return
     */
    public Result<?> resetPassword(String username, String oldpassword, String newpassword, String confirmpassword);

    /**
     * 修改密码
     *
     * @param KsUser
     * @return
     */
    public Result<?> changePassword(KsUser KsUser);

    /**
     * 删除用户
     * @param
     * @return
     */
    public Integer deleteUser(KsUserWithBLOBs ksUser);

    /**
     * 批量删除用户
     * @param userIds
     * @return
     */
    public boolean deleteBatchUsers(String userIds);

    public KsUser getUserByParames(String userName);

    /**
     * 添加用户和用户角色关系
     * @param user
     * @param roles
     */
    public void addUserWithRole(KsUser user,String roles);


    /**
     * 修改用户和用户角色关系
     * @param user
     * @param roles
     */
    public void editUserWithRole(KsUser user,String roles);

    /**
     * 获取用户的授权角色
     * @param username
     * @return
     */
    public List<String> getRole(String username);
    /**
     * 根据部门Id查询
     * @param
     * @return
     */
    public IPage<KsUser> getUserByDepId(Page<KsUser> page, String departId, String username);

    /**
     * 根据部门Ids查询
     * @param
     * @return
     */
    public IPage<KsUser> getUserByDepIds(Page<KsUser> page, List<String> departIds, String username);

    /**
     * 根据 userIds查询，查询用户所属部门的名称（多个部门名逗号隔开）
     * @param
     * @return
     */
    public Map<String,String> getDepNamesByUserIds(List<String> userIds);

    /**
     * 根据部门 Id 和 QueryWrapper 查询
     *
     * @param page
     * @param departId
     * @param queryWrapper
     * @return
     */
    public IPage<KsUser> getUserByDepartIdAndQueryWrapper(Page<KsUser> page, String departId, QueryWrapper<KsUser> queryWrapper);

    /**
     * 根据角色Id查询
     * @param
     * @return
     */
    public IPage<KsUser> getUserByRoleId(Page<KsUser> page,String roleId, String username);

    /**
     * 通过用户名获取用户角色集合
     *
     * @param username 用户名
     * @return 角色集合
     */
    Set<String> getUserRolesSet(String username);

    /**
     * 通过用户名获取用户权限集合
     *
     * @param username 用户名
     * @return 权限集合
     */
    Set<String> getUserPermissionsSet(String username);

    /**
     * 根据用户名设置部门ID
     * @param username
     * @param orgCode
     */
    void updateUserDepart(String username,String orgCode);

    /**
     * 根据手机号获取用户名和密码
     */
    public KsUser getUserByPhone(String phone);


    /**
     * 根据邮箱获取用户
     */
    public KsUser getUserByEmail(String email);


    /**
     * 添加用户和用户部门关系
     * @param user
     * @param selectedParts
     */
    void addUserWithDepart(KsUser user, String selectedParts);

    /**
     * 编辑用户和用户部门关系
     * @param user
     * @param departs
     */
    void editUserWithDepart(KsUser user, String departs);

    /**
     * 校验用户是否有效
     * @param KsUser
     * @return
     */
    Result checkUserIsEffective(KsUser KsUser);

    /**
     * 查询被逻辑删除的用户
     */
    List<KsUser> queryLogicDeleted();

    /**
     * 查询被逻辑删除的用户（可拼装查询条件）
     */
    List<KsUser> queryLogicDeleted(LambdaQueryWrapper<KsUser> wrapper);

    /**
     * 还原被逻辑删除的用户
     */
    boolean revertLogicDeleted(List<String> userIds, KsUser updateEntity);

    /**
     * 彻底删除被逻辑删除的用户
     */
    boolean removeLogicDeleted(List<String> userIds);

    /**
     * 根据用户编号获取用户详情
     * @param userNo
     * @return
     */
    KsUserWithBLOBs getUserByUserNo(String userNo);

    /**
     * 用户登录
     * @param requestJson
     * @return
     * @throws Exception
     */
    Map<String,Object> checkLoginAccountAndPasswd(JSONObject requestJson) throws Exception;;

    /**
     * 用户注册
     * @param requestJson
     * @return
     */
    KsUserWithBLOBs checkAndRegisterUser(JSONObject requestJson) throws Exception;

}
